home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
misc
/
emu
/
zxtools.lha
/
src.lha
/
Grabber.S
next >
Wrap
Text File
|
1994-10-18
|
7KB
|
497 lines
ùúùúÿÊNÿÊNÿÊNÿÊNÿÊNÿÊNÿÊNÿÊNÿÊN;---------------T
debug equ 0
ifne debug
lea cli(pc),a0
moveq #cliend-cli,d0
bra.b aa
cli dc.b 'ram:loaded'
dc.b 10
cliend
even
endc
incdir 'include34/'
include 'exec/types.i'
include 'exec/exec_lib.i'
include 'devices/serial.i'
include 'devices/timer.i'
include 'libraries/dos.i'
include 'libraries/dos_lib.i'
include 'mine.i'
addwatch a4,h
addwatch a5,h
aa move.l sp,stack
sf -1(a0,d0) ;null terminated
move.l a0,a5
moveq #32,d0
.loop cmp.b (a5)+,d0
beq.b .loop
tst.b -(a5)
beq.w Error
move.l 4.w,a6
lea dosnm(pc),a1
jsrlib OldOpenLibrary
move.l d0,dosbas
beq.w nodos
lea SerialPortName(pc),a1
bsr.w CreatePort0
move.l d0,SerPort
beq.w NoPort
move.l d0,a1
moveq #ioextser_size,d0
bsr.w CreateIO
move.l d0,SerIO
beq.w NoSerIO
move.l d0,a4
moveq #serf_7wire+serf_shared,d0
and.b serdefflags(pc),d0
move.b d0,io_serflags(a4) ;7wire, shared
lea devname(pc),a0
moveq #0,d0 ;unit
move.l a4,a1
moveq #0,d1 ;flags
jsrlib OpenDevice
tst.l d0
bmi.w NoDevice
**************************** Main Program *******************************
main bsr.w SetParams ;set your device parameters
lea filename,a1
.loop move.b (a5)+,(a1)+
bne.b .loop
subq.l #1,a1
lea FileExtension(pc),a5
.loop2 move.b (a5)+,(a1)+
bne.b .loop2
lea -2(a1),a5
Loading moveq #2,d0
bsr.w ReceiveXbytes
tst.l d0
bne.b allok
lea mybuffer,a0
move.w (a0)+,d0
move.l d0,d7
addq.l #1,d0 ;Add Checksum
bsr.w ReceiveBytes
tst.l d0
bne.b .here
lea filename,a0
lea mybuffer+2,a1
move.l d7,d0
bsr.w SaveFile
move.l d7,d0
lea mybuffer,a0
bsr.b CheckBuffer
beq.b ReadOK
.here move.w d0,$dff180
addq.w #3,d0
btst #6,$bfe001
bne.b .here
bra.b Exitus
ReadOK
bsr.b IncFileExt
bra.b Loading
allok clr.l errornr
*************************** closing device ******************************
Exitus move.l stack(pc),sp
move.l a4,a1
jsrlib CloseDevice
NoDevice move.l serIO,a1
bsr.w RemoveIO
NoSerIO move.l serport,a1
bsr.w RemovePort
noport
move.l dosbas,a1
jsrlib CloseLibrary
nodos
Error move.l errornr(pc),d0
rts
stack dc.l 0
errornr dc.l 20
IncFileExt move.l a5,a0
.loop addq.b #1,(a0)
cmp.b #'9',(a0)
bls.b .ok
move.b #'0',(a0)
subq.l #1,a0
bra.b .loop
.ok rts
CheckBuffer moveq #0,d1 ;xor
move.b (a0)+,d2 ;add
not.b d2
move.b (a0)+,d3
not.b d3
add.b d3,d2
subq.w #1,d0
bcs.b .done
.loop move.b (a0)+,d3
eor.b d3,d1
not.b d3
add.b d3,d2
dbra d0,.loop
tst.b d1
bne.b .error
.done cmp.b (a0),d2
.error rts
*************************** Parameter parsing ***************************
SkipSpaces moveq #32,d0
.loop cmp.b (a5)+,d0
beq.b .loop
testend tst.b -(a5)
rts
getnumber moveq #0,d0
move.l d0,d1
moveq #10,d2
.loop move.b (a5)+,d1
sub.b #'0',d1
bcs.B testend
cmp.b d2,d1
bcc.B testend
mulu d2,d0
add d1,d0
bra.B .loop
********************** set serial.device parameters *********************
SetParams move #sdcmd_setparams,io_command(a4)
lea io_CtlChar(a4),a1
lea ser_defaults(pc),a0
moveq #(serdefslen+3)/4-1,d0
setserdefs move.l (a0)+,(a1)+
dbra d0,setserdefs
move.l a4,a1
bra.w DelayedDoIO
*************************** get some bytes *****************************
ReceiveXbytes lea mybuffer,a0
;a0 = buffer, d0=len, a4 ioreq
ReceiveBytes pushm d2-d7/a2-a6
move.l a0,io_data(a4)
move.l d0,io_length(a4)
move.w #cmd_read,io_command(a4)
move.l a4,a1
bsr.w DelayedDoIO
popm d2-d7/a2-a6
rts
********************************************************************
;CreatePort(pri,name)(d0,a1)
CreatePort0 moveq #0,d0
CreatePort pushm a5-a6
sub.l a5,a5
move.l 4.w,a6
pushm d0/a1
moveq #mp_size,d0
move.l #$10001,d1 ;public clear
jsrlib AllocMem
popm d1/a1
tst.l d0
beq.b .nomem
move.l d0,a5
move.b #NT_MSGPORT,ln_type(a5)
move.b d1,ln_pri(a5)
move.l a1,ln_name(a5)
;port is signal cause of clear mem
moveq #-1,d0
jsrlib AllocSignal
move.b d0,mp_sigbit(a5)
bmi.b RemovePort|.nosignal
sub.l a1,a1
jsrlib FindTask
move.l d0,mp_sigtask(a5)
move.l a5,a1
jsrlib AddPort
.nomem move.l a5,d0
popm a5-a6
rts
;RemovePort(port)(a1)
RemovePort pushm a5-a6
move.l 4.w,a6
move.l a1,a5
jsrlib RemPort
.replymsgs move.l a5,a0
jsrlib GetMsg
tst.l d0
beq.b .nomoremsgs
move.l d0,a1
cmp.l mn_replyport(a1),a5
beq.b .replymsgs
jsrlib ReplyMsg
bra.b .replymsgs
.nomoremsgs move.b mp_sigbit(a5),d0
jsrlib FreeSignal
.nosignal move.l a5,a1
moveq #mp_size,d0
jsrlib FreeMem
moveq #0,d0
popm a5-a6
rts
;CreateIO(size,msgport)(d0,a1)
CreateIO pushm a5-a6
sub.l a5,a5
move.l 4.w,a6
pushm d0/a1
move.l #$10001,d1
jsrlib AllocMem
popm d1/a1
tst.l d0
beq.b .nomem
move.l d0,a5
move.w d1,mn_length(a5)
move.l a1,mn_replyport(a5)
.nomem move.l a5,d0
popm a5-a6
rts
;RemoveIO(IOrequest)(a1)
RemoveIO push a6
move.l 4.w,a6
moveq #0,d0
move.w mn_length(a1),d0
jsrlib FreeMem
pop a6
rts
;DelayedIO(IOrequest)
DelayedDoIO pushm d2-d3/d7/a3-a6
push mn_replyport(a1)
moveq #-1,d7
move.l 4.w,a6
move.l a1,a3
lea TimerPortName(pc),a1
bsr.w CreatePort0
tst.l d0
beq.w .noport
move.l d0,a5
move.l a5,a1
moveq #iotv_size,d0
bsr.b CreateIO
tst.l d0
beq.b .noio
move.l d0,a4
lea TimerDevName(pc),a0
moveq #unit_vblank,d0
move.l a4,a1
moveq #0,d1
jsrlib OpenDevice
tst.l d0
bne.b .NoDevice
move.l a3,a1
move.l a5,mn_replyport(a1)
jsrlib SendIO
.loop move #tr_addrequest,io_command(a4)
move.l #1,iotv_time+tv_secs(a4)
clr.l iotv_time+tv_micro(a4)
move.l a4,a1
jsrlib SendIO
move.l a5,a0
jsrlib WaitPort
move.l a5,a0
jsrlib GetMsg
cmp.l d0,a4
bne.b .Userscameback
moveq #0,d1
jsrlib SetSignal
and.w #sigbreakf_ctrl_c,d0
bne.b .break
bra.b .loop
.UsersCameBack moveq #0,d7
move.l a4,a1
bra.b .cont
.break move.l a3,a1
.cont jsrlib AbortIO
move.l a5,a0
jsrlib WaitPort
move.l a5,a0
jsrlib GetMsg
move.l a4,a1
jsrlib CloseDevice
.nodevice move.l a4,a1
bsr.w RemoveIO
.noio move.l a5,a1
bsr.w RemovePort
.noport move.l d7,d0
pop mn_replyport(a3)
popm d2-d3/d7/a3-a6
rts
************************** File Handling **********************
;void (a0 filename, d0 len, a1 address)
SaveFile pushm d2-d7/a2-a6
move.l a1,a5
move.l d0,d6
move.l dosbas,a6
move.l a0,d1
move.l #mode_newfile,d2
jsrlib Open
move.l d0,d7
beq.b .fail
move.l d7,d1
move.l a5,d2
move.l d6,d3
jsrlib Write
move.l d7,d1
jsrlib Close
.fail popm d2-d7/a2-a6
rts
***************************************************************
dosbas dc.l 0
serio dc.l 0
serport dc.l 0
ser_defaults dc.b $11 ;CtlChar - xON
dc.b $13 ;xOFF
dc.b $0 ;INQ
dc.b $0 ;ACQ
dc.l $2000 ;RBuffLen
dc.l 0 ;extflags mspon,msp (mark-space parity)
Baud dc.l 19200 ;Baud
dc.l 250000 ;BrkTime
dc.b 0,0,0,0,0,0,0,0 ;TermArray
dc.b 8 ;ReadLen
dc.b 8 ;WriteLen
dc.b 1 ;StopBits
serdefflags dc.b serf_xdisabled+serf_7wire
;xdisabled
;eofmode (for each request)
;shared (on open too)
;rad_boogie
;queuedbrk (for each break)
;7wire (on open too)
;party_odd
;party_on
serdefslen equ *-ser_defaults
SerialPortName dc.b 'GB Serial',0
TimerPortName dc.b 'GB Timer',0
TimerDevName dc.b 'timer.device',0
DevName dc.b 'serial.device',0
dosnm dc.b 'dos.library',0
FileExtension dc.b '.000',0
dc.b '$VER: ZX->Amiga File Grabber 0.3 (18.10.94)',13,10
dc.b '(C) 1994 Patrik Rak - Raxoft'
section buffer,bss
filename ds.b 256
mybuffer ds.b 65536+4
mybufflen equ *-mybuffer